package org.fujay.langchain4jserver.application.service;

import org.fujay.langchain4jserver.application.command.CreateApplicationCommand;
import org.fujay.langchain4jserver.application.command.UpdateApplicationConfigurationCommand;
import org.fujay.langchain4jserver.application.dto.ApplicationDetailDTO;
import org.fujay.langchain4jserver.application.dto.ApplicationSummaryDTO;
import org.fujay.langchain4jserver.domain.application.vo.AppId;

import java.util.List;
import java.util.Optional;

/**
 * 应用应用服务接口
 */
public interface ApplicationService {

    /**
     * 创建新应用
     *
     * @param command 创建应用命令对象
     * @return 创建的应用详情 DTO
     */
    ApplicationDetailDTO createApplication(CreateApplicationCommand command);

    /**
     * 获取应用详情
     *
     * @param appId 应用ID
     * @return 应用详情 DTO Optional
     */
    Optional<ApplicationDetailDTO> getApplication(AppId appId);

    /**
     * 列出所有应用概要信息
     *
     * @return 应用概要 DTO 列表
     */
    List<ApplicationSummaryDTO> listApplications();

    /**
     * 更新应用配置
     *
     * @param command 更新应用配置命令对象
     */
    void updateApplicationConfiguration(UpdateApplicationConfigurationCommand command);

    /**
     * 删除应用
     *
     * @param appId 应用ID
     */
    void deleteApplication(AppId appId);

    // TODO: 需要回滚配置的方法，如果实现，也应考虑返回 DTO
    // Optional<ApplicationDetailDTO> rollbackApplicationConfiguration(AppId appId,
    // Integer version, String changedBy);

}
